Fix this for the single-rectangle case. (#326127, Benjamin Berg)
authorMatthias Clasen <mclasen@redhat.com>
Sun, 8 Jan 2006 06:11:18 +0000 (06:11 +0000)
committerMatthias Clasen <matthiasc@src.gnome.org>
Sun, 8 Jan 2006 06:11:18 +0000 (06:11 +0000)
2006-01-08  Matthias Clasen  <mclasen@redhat.com>

* gdk/gdkregion-generic.c (miRegionCopy): Fix this for the
single-rectangle case.  (#326127, Benjamin Berg)
(gdk_region_copy): Use miRegionCopy() here.

ChangeLog
ChangeLog.pre-2-10
gdk/gdkregion-generic.c

index 72d821f485c28d33d252161d0329c2a81ec0ec5e..73b69b76ba3d64632389bda52bba88efbb6c71c5 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2006-01-08  Matthias Clasen  <mclasen@redhat.com>
+
+       * gdk/gdkregion-generic.c (miRegionCopy): Fix this for the 
+       single-rectangle case.  (#326127, Benjamin Berg)
+       (gdk_region_copy): Use miRegionCopy() here.
+
 2006-01-07  Matthias Clasen  <mclasen@redhat.com>
 
        Fix actiongroup-action interaction that relied on 
index 72d821f485c28d33d252161d0329c2a81ec0ec5e..73b69b76ba3d64632389bda52bba88efbb6c71c5 100644 (file)
@@ -1,3 +1,9 @@
+2006-01-08  Matthias Clasen  <mclasen@redhat.com>
+
+       * gdk/gdkregion-generic.c (miRegionCopy): Fix this for the 
+       single-rectangle case.  (#326127, Benjamin Berg)
+       (gdk_region_copy): Use miRegionCopy() here.
+
 2006-01-07  Matthias Clasen  <mclasen@redhat.com>
 
        Fix actiongroup-action interaction that relied on 
index 267b44a1596ab7e5e2809d34add1dab760d5163d..2d1524bbcbc0a818772fd0e061534bea2311f066 100644 (file)
@@ -168,19 +168,9 @@ gdk_region_copy (GdkRegion *region)
 
   g_return_val_if_fail (region != NULL, NULL);
 
-  temp = g_slice_new (GdkRegion);
+  temp = gdk_region_new ();
 
-  temp->numRects = region->numRects;
-  temp->extents = region->extents;
-  temp->size = region->numRects;
-
-  if (region->numRects == 1)
-    temp->rects = &temp->extents;
-  else
-    {
-      temp->rects = g_new (GdkRegionBox, region->numRects);
-      memcpy (temp->rects, region->rects, region->numRects * sizeof (GdkRegionBox));
-    }
+  miRegionCopy (temp, region);
 
   return temp;
 }
@@ -600,15 +590,20 @@ gdk_region_intersect (GdkRegion *source1,
 }
 
 static void
-miRegionCopy(GdkRegion *dstrgn, GdkRegion *rgn)
+miRegionCopy (GdkRegion *dstrgn, 
+             GdkRegion *rgn)
 {
   if (dstrgn != rgn) /*  don't want to copy to itself */
     {  
       if (dstrgn->size < rgn->numRects)
         {
-         dstrgn->rects = g_renew (GdkRegionBox, dstrgn->rects, rgn->numRects);
+         if (dstrgn->rects != &dstrgn->extents)
+           g_free (dstrgn->rects);
+
+         dstrgn->rects = g_new (GdkRegionBox, rgn->numRects);
          dstrgn->size = rgn->numRects;
        }
+
       dstrgn->numRects = rgn->numRects;
       dstrgn->extents = rgn->extents;